package com.mco.utils.bloomfilter;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * 初始化布隆过滤器
 *
 * @author ：liao.wei
 * @date ：2023/9/23 16:13
 * @package : com.mco.utils.bloomfilter
 */
@Component
@Slf4j
@RequiredArgsConstructor
public class BloomFilterInitUtil {
	
	public static final String WHITE_CACHE_KEY_CUSTOMER = "white_list_customer";
	
	private final RedisTemplate redisTemplate;
	
	/**
	 * 初始化工具
	 */
	@PostConstruct
	public void init() {
		// 白名单key 加载到过滤器
		String key = "customer:2";
		// 计算hash值，对计算结果取绝对值（因为存在负值）
		int hashVal=Math.abs(key.hashCode());
		//计算位数位置（通过hashVal和2的32次方取模后，余数）
		long index= (long) (hashVal%Math.pow(2,32));
		log.info(key+"-对应的位置-"+index);
		//设置redis 中bitmap 对应位置的坑位，设置 1
		redisTemplate.opsForValue().setBit(WHITE_CACHE_KEY_CUSTOMER,index,true);
	}
}
